<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="shortcut icon" type="image/x-icon" href="../favicon.ico"/>
    <title>JAVA 编码规范 jetbrick-template</title>

    <link href="../assets/css/application.min.css" rel="stylesheet" type="text/css"/>

    <!--[if lt IE 9]><script src="../assets/js/html5shiv.js"></script><![endif]-->
    <script type="text/javascript" src="../assets/js/application.min.js"></script>
</head>

<body>
<a href="https://github.com/subchen/jetbrick-template/" target="_blank">
    <img src="../assets/images/forkme_right_orange.png" alt="Fork me on GitHub" class="fork-me-on-github">
</a>

<div class="jb-topbar">
    <div class="container">
        <a href="http://subchen.github.io/"><img src="../assets/images/logo-mini.png"/></a>
        <!--
        <ul class="menubar">
            <li><a href="">commons</a></li>
            <li><a href="">webmvc</a></li>
            <li><a href="">template</a></li>
            <li><a href="">orm</a></li>
            <li><a href="">widget</a></li>
            <li><a href="">javadoc-chm</a></li>
        </ul>
        -->
        <div class="pull-right" style="color:#fff;line-height:40px;font-size:16px;padding-right:20px">QQ 交流圈：310491655</div>
    </div>
</div>

<div class="jb-banner">
    <div class="container">
        <a href="http://subchen.github.io/jetbrick-template/index.html">
            <img src="../assets/images/jetbrick-template-logo.png" class="pull-left" />
        </a>
        <ul class="description">
            <li>1. 全新一代 Java 模板引擎</li>
            <li>2. 具有高性能、高扩展性</li>
            <li>3. 完美替代 JSP, Velocity 等引擎模板</li>
        </ul>
        <a href="download/jetbrick-template-1.2.3.zip" class="download-button">
            <img src="../assets/images/download.png"/>
            <span>jetbrick-template-1.2.3.zip<br/>2014-03-10</span>
        </a>
    </div>
</div>

<div class="container">
    <div class="jb-section">
        <ul class="tabs">
            <li><a href="overview.html">简介</a></li>
            <li><a href="download.html">下载</a></li>
            <li><a href="userguide.html">开发指南</a></li>
            <li><a href="config.html">配置指南</a></li>
            <li><a href="syntax.html">语法指南</a></li>
            <li><a href="integrate.html">Web 框架集成</a></li>
            <!--
            <li><a href="example.html">例子</a></li>
            -->
            <li><a href="faq.html">FAQ</a></li>
            <li><a href="about.html">关于</a></li>
        </ul>
    </div>
</div>

<div class="container">
    <div class="announcement">
        <a href="download.html#version">2014-03-10：jetbrick-template-1.2.3 正式版已发布，欢迎下载。</a>
    </div>
</div>

<div class="container">

    <style type="text/css">
        .affix-top {
          float: left;
          margin-top: 20px;
        }
        .affix {
          position: left;
          float: right;
          top: 20px;
          margin-top: 0 !important;
          z-index: 100;
        }
        .jb-nav-list-container {
            width: 220px !important;
            margin-top: 20px;
        }
        .markdown {
          margin-left: 260px; 
        }
    </style>
    <div class="jb-nav-list-container" data-spy="affix" data-offset-top="230">
        <ul class="jb-nav-list">
            <li><a href="#x994372586">1 JAVA 编码规范 1.0 (jetbrick 版)</a></li>
            <li><a href="#x1893641216">&nbsp&nbsp1.1 Java 文件格式</a></li>
            <li><a href="#x680360">&nbsp&nbsp1.2 包名</a></li>
            <li><a href="#x1009394">&nbsp&nbsp1.3 类名</a></li>
            <li><a href="#x704276146">&nbsp&nbsp1.4 Imports</a></li>
            <li><a href="#x835132">&nbsp&nbsp1.5 方法</a></li>
            <li><a href="#x785047">&nbsp&nbsp1.6 常量</a></li>
            <li><a href="#x702711">&nbsp&nbsp1.7 变量</a></li>
            <li><a href="#x901602">&nbsp&nbsp1.8 注释</a></li>
            <li><a href="#x778102">&nbsp&nbsp1.9 异常</a></li>
            <li><a href="#x833170">&nbsp&nbsp1.10 日志</a></li>
            <li><a href="#x656426232">&nbsp&nbsp1.11 单元测试</a></li>
        </ul>
    </div>

    <div class="markdown">

<!-- markdown body begin -->

    <h1><a name="x994372586"></a><span>1 JAVA 编码规范 1.0 (jetbrick 版)</span></h1>
<h2><a name="x1893641216"></a><span>1.1 Java 文件格式</span></h2> 
<ol> 
 <li>文件格式必须是 <code>UTF-8</code>，无 <code>BOM</code> 格式</li> 
 <li>文件回车换行符必须是 <code>Unix</code> 风格</li> 
 <li>每个文件结尾必须有一个空白行</li> 
 <li>行尾空白内容应该被 trim 掉</li> 
 <li><p>每个文件开头必须写上项目的标准 LICENSE 注释，如下：</p> <script type="syntaxhighlighter" class="brush: java"><![CDATA[
/**
 * jetbrick-template
 * http://subchen.github.io/jetbrick-template/
 *
 * Copyright 2010-2013 Guoqiang Chen. All rights reserved.
 * Email: subchen@gmail.com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
]]></script></li> 
 <li><p>代码必须是格式化的，请使用统一的 Eclipse 的代码格式文件：<a href="download/eclipse-jetbrick-style-formatter.xml">eclipse-jetbrick-style-formatter.xml</a></p></li> 
 <li><p>不想被自动格式化的代码请用 <code>@formatter</code> 包裹，如：</p> <script type="syntaxhighlighter" class="brush: java"><![CDATA[
//@formatter:off
private static final String[] DATE_PATTERNS = new String[] { 
    "yyyy-MM-dd HH:mm:ss.SSS", 
    "yyyy-MM-dd HH:mm:ss", 
    "yyyy-MM-dd", 
    "HH:mm:ss"
};
//@formatter:on
]]></script></li> 
 <li>Java 文件必须是可编译的，不应该有任何的 <code>warning</code> 存在</li> 
</ol>
<h2><a name="x680360"></a><span>1.2 包名</span></h2> 
<ol> 
 <li>包名必须是全部小写的，最好用一个单词表示</li> 
 <li>包名必须以 <code>jetbrick</code> 开头</li> 
 <li>接口或者抽象类的多种实现，推荐以 <code>spi</code>, <code>support</code> 包命名</li> 
</ol>
<h2><a name="x1009394"></a><span>1.3 类名</span></h2> 
<ol> 
 <li>类名必须首字母大写，驼峰命名法： 如 <code>UserInfo</code>，<code>ClassUtils</code></li> 
 <li>类名尽量不要缩写，如果缩写，必须为特别常用的缩写</li> 
 <li>接口的命名不要以 <code>I</code> 开头</li> 
 <li>抽象类推荐以 <code>Abstract</code> 开头</li> 
 <li>接口的默认实现推荐以 <code>Default</code> 开头或者 <code>Impl</code> 结尾</li> 
 <li>每个 Class 都需要标注 <code>@auther</code>, <code>@since</code></li> 
 <li>每个 Class 都应该有简短的注释</li> 
</ol>
<h2><a name="x704276146"></a><span>1.4 Imports</span></h2> 
<ol> 
 <li>Imports 间不要有空行</li> 
 <li>超过 3 个相同包下面的 Class 需要使用 <code>.*</code> 代替</li> 
 <li>不要使用 <code>import static</code>, 除了 <code>JUnit</code> / <code>TestNG</code> 的 <code>assertXXX</code> 方法</li> 
</ol>
<h2><a name="x835132"></a><span>1.5 方法</span></h2> 
<ol> 
 <li>方法名称应该采用首字母小写，驼峰命名法： 如 <code>getUser</code>，<code>lookupClass</code></li> 
 <li>对于一个 <code>public</code> 的方法，都应该对参数进行基本的校验，比如 <code>null</code> 检测</li> 
 <li>对外开放 API 的 <code>public</code> 方法都需要标注 <code>@since</code></li> 
 <li>每个 <code>public</code> 方法都应该有简短的注释</li> 
</ol>
<h2><a name="x785047"></a><span>1.6 常量</span></h2> 
<ol> 
 <li>常量必须是全大写，并用 <code>_</code> 分隔，如 <code>MAX_INTEGER</code></li> 
 <li>常量必须是 <code>static</code> <code>final</code></li> 
</ol>
<h2><a name="x702711"></a><span>1.7 变量</span></h2> 
<ol> 
 <li>变量名称必须首字母小写，驼峰命名法</li> 
 <li>变量名尽量使用缩写，以简短为主</li> 
 <li>不要用拼音，要用英文表示</li> 
 <li>如果是集合或数组，用复数名词，或者添加 <code>List</code>, <code>Map</code> 等后缀</li> 
</ol>
<h2><a name="x901602"></a><span>1.8 注释</span></h2> 
<ol> 
 <li>注释必须和代码保持一致，中文/英文均可</li> 
 <li>注释中的第一个句子要以（英文）句号、问号或者感叹号结束。 <code>javadoc</code> 工具会将注释中的第一个句子放在方法汇总表和索引中。</li> 
 <li>如果注释中有超过一个段落，用 <code>&lt;p&gt;</code> 标签分隔</li> 
 <li>如果注释中有多个章节，用 <code>&lt;h2&gt;</code> 标签声明每个章节的标题</li> 
 <li>示例代码以 <code>&lt;pre&gt;</code> 包裹</li> 
</ol>
<h2><a name="x778102"></a><span>1.9 异常</span></h2> 
<ol> 
 <li>异常类名必须以 <code>Exception</code> 结尾</li> 
 <li>所有自定义异常都必须继承自 <code>RuntimeException</code></li> 
 <li>方法尽量不要抛出非 <code>RuntimeException</code> 异常</li> 
 <li>异常应该和主要的 Class 放在一起，而不是所有的异常类放在一个包下面</li> 
 <li>异常描述应该使用英文句子，尽量不要用中文。</li> 
 <li>被 <code>catch</code> 住的 <code>Exception</code>，必须要处理，或者重新抛出</li> 
</ol>
<h2><a name="x833170"></a><span>1.10 日志</span></h2> 
<ol> 
 <li>日志框架使用 <code>slf4j</code></li> 
 <li>实例不多的对象类，不要使用 <code>static</code> 声明 <code>log</code></li> 
 <li>尽量使用 <code>debug</code> 而不是 <code>info</code> 级别</li> 
 <li>启动时候需要输出的重要日志，请用 <code>info</code> 级别</li> 
 <li>被 <code>catch</code> 住的 <code>Exception</code>，应该被打印出来 <code>log.error(e)</code></li> 
</ol>
<h2><a name="x656426232"></a><span>1.11 单元测试</span></h2> 
<ol> 
 <li>单元测试框架用 <code>TestNG</code></li> 
 <li>单元测试覆盖率工具用 <code>EclEmma</code></li> 
 <li>Mock 框架使用 <code>Mockito</code></li> 
 <li>尽可能为每个方法提供单元测试</li> 
 <li>覆盖率应该不低于 70%</li> 
</ol>

<!-- markdown body end -->

    </div>
</div>

<div class="container">
    <div class="jb-footer">
        Copyright 2010-2014 Guoqiang Chen. All rights reserved.
        <br/>subchen&#64;gmail.com, QQ 交流圈：310491655
    </div>
</div>

<style type="text/css">
#cnzz_stat_icon_1000210720 {
	display: none;
}
</style>
<script type="text/javascript">
var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cspan id='cnzz_stat_icon_1000210720'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s22.cnzz.com/z_stat.php%3Fid%3D1000210720' type='text/javascript'%3E%3C/script%3E"));
</script>



</body>
</html>
